package cnn.user.service;

import cnn.user.dao.UserDao;
import cnn.user.entity.UserDTO;
import cnn.topfox.data.DbState;
import cnn.topfox.service.AdvancedService;
import cnn.user.entity.UserQTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
public class UserServiceDefault extends AdvancedService<UserDao, UserDTO, UserQTO> {
    /**
     * 新增 修改  删除 执行之前
     * @param list
     */
    @Override
    public void beforeSave(List<UserDTO> list) {
        //对list的遍历
        list.forEach(userDTO->{
            if(DbState.INSERT.equals(userDTO.dataState())){
                log.debug("这是一个新增的DTO");
            }else if(DbState.UPDATE.equals(userDTO.dataState())) {
                log.debug("这是一个更新的DTO");
            }else if(DbState.DELETE.equals(userDTO.dataState())) {
                log.debug("这是一个删除的DTO");
            }
        });
    }

    /**
     * 在这几个方法都会执行到: insert insertList update updateList updateBatch
     * 每行数据执行本方法一次,新增和更新 执行之前的逻辑写到这里, 如通用的检查
     * @param userDTO
     * @param state
     */
    @Override
    public void beforeInsertOrUpdate(UserDTO userDTO, String state) {
        if(DbState.INSERT.equals(state)){
            /** 新增之前的业务逻辑 */
        }else if (DbState.UPDATE.equals(state)){
            /** 更新之前业务逻辑 */
        }
        /** 新增和更新之前的业务逻辑 */
    }

    @Override
    public void afterInsertOrUpdate(UserDTO beanDTO, String state) {
        if(DbState.INSERT.equals(state)){
            /** 新增 之后 的业务逻辑 */
        }else if (DbState.UPDATE.equals(state)){
            /** 更新 之后 业务逻辑 */
        }
        /** 新增和更新 之后 的业务逻辑 */
    }

    /**
     * 这几个方法都会执行到: delete(beanDTO) deleteByIds(id1,id2) deleteBatch() deleteList(list<beanDTO>)
     * @param beanDTO
     */
    @Override
    public void beforeDelete(UserDTO beanDTO) {
        /** 删除之前的业务逻辑 */
    }
    @Override
    public void afterDelete(UserDTO beanDTO) {
        /** 删除之后的业务逻辑 */
    }
}